import queue
import threading
import time

# 定义一个消息队列
message_queue = queue.Queue()


# 生产者线程函数
def producer():
    for i in range(5):
        # 模拟生产消息
        message = f"Message {i}"
        print(f"->Producing {message}")
        # 将消息放入队列
        message_queue.put(message)
        # 模拟生产耗时
        time.sleep(1)


# 消费者线程函数
def consumer():
    while True:
        # 从队列中获取消息，如果队列为空则阻塞
        message = message_queue.get()
        if message is None:
            # 收到结束信号，退出循环
            break
        print(f"----->Consuming {message}")
        # 模拟消费耗时
        time.sleep(0.5)
        # 标记任务完成
        message_queue.task_done()


if __name__ == "__main__":
    # 创建生产者线程-耗时1秒
    producer_thread = threading.Thread(target=producer)
    # 创建消费者线程-耗时0.5秒
    consumer_thread = threading.Thread(target=consumer)

    # 启动生产者线程
    producer_thread.start()
    # 启动消费者线程
    consumer_thread.start()

    # 等待生产者线程完成
    producer_thread.join()

    # 发送结束信号给消费者线程
    message_queue.put(None)

    # 等待消费者线程完成
    consumer_thread.join()

    print("All tasks are done.")
